package kn.tool.excel;

import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import kn.tool.core.ObjectUtil;

import java.io.File;
import java.io.InputStream;
import java.util.List;

/**
 * @author: dengkunnan
 * @date: 2020-07-12 00:45
 * @description: Excel 读取和生成
 **/
public class ExcelHanderUtil {

    /**
     * 从输入流中读取excel文件，并转换成List<T></>对象
     *
     * @param inputStream
     * @param className
     * @param <T>
     * @return
     */
    public static <T> List<T> readToList(InputStream inputStream, Class<T> className) {
        ExcelReader reader = ExcelUtil.getReader(inputStream);
        List<T> list = reader.readAll(className);
        return list;
    }

    /**
     * 从输入流中读取excel文件，并转换成List<T></>对象
     *
     * @param excelFile
     * @param className
     * @param <T>
     * @return
     */
    public static <T> List<T> readToList(File excelFile, Class<T> className) {
        ExcelReader reader = ExcelUtil.getReader(excelFile);
        List<T> list = reader.readAll(className);
        return list;
    }

    /**
     * 从输入流中读取excel文件，并转换成List<T></>对象
     *
     * @param excelFile
     * @param className
     * @param sheetNumber sheet 编号
     * @return
     */
    public static <T> List<T> readToList(File excelFile, Class<T> className, Integer sheetNumber) {
        ExcelReader reader = ExcelUtil.getReader(excelFile, sheetNumber);
        List<T> list = reader.readAll(className);
        return list;
    }


    /**
     * 从输入流中读取excel文件，并转换成List<T></>对象
     *
     * @param excelFile
     * @param className
     * @param sheetName sheet 名称
     * @return
     */
    public static <T> List<T> readToList(File excelFile, Class<T> className, String sheetName) {
        ExcelReader reader = ExcelUtil.getReader(excelFile, sheetName);
        List<T> list = reader.readAll(className);
        return list;
    }


    /**
     * 生成Excel文件
     *
     * @param pathName eg:d:/writeTest.xlsx
     * @param rows     行集合
     * @param title    标题
     * @return
     */
    public void excelWriter(String pathName, List<List<String>> rows, String title) {
        //通过工具类创建writer
        ExcelWriter writer = ExcelUtil.getWriter(pathName);
        //通过构造方法创建writer
        if (!ObjectUtil.isNull(title)) {
            //跳过当前行，既第一行，非必须，在此演示用
            writer.passCurrentRow();

            //合并单元格后的标题行，使用默认标题样式
            writer.merge(rows.get(0).size() - 1, title);
        }
        writer.write(rows, true);
        writer.close();

    }
}
